package com.sjz.chat5;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;

/***
 * 对话框
 */
public class DialogActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_dialog);
    }

    /**
     * 显示一般AlertDialog   AlertDialog对象
     * @param v
     */
    public void showAD(View v){
        new AlertDialog.Builder(this)
                .setTitle("删除数据")////设置标题
                .setMessage("你确定删除数据吗")
                .setPositiveButton("删除", new DialogInterface.OnClickListener() {  //确定删除按钮
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(DialogActivity.this, "删除数据", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {//取消删除按钮
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(DialogActivity.this, "取消删除数据", Toast.LENGTH_SHORT).show();
                    }
                }).show();

    }

    /****
     *  显示单选列表AlertDialog
     *  setSingleChoiceItems方法可以在对话框中显示一个单选列表，用户可以从中选择一个选项
     *
     * @param v
     */
    public void showLD(View v){
        final String[] items = {"红", "蓝", "绿", "灰"}; //final的变量在方法执行完后还存在   对话框显示的每一列的内容
        new AlertDialog.Builder(this)
                .setTitle("指定背景颜色")
                //items是要显示的选项数组，checkedItem是默认选中的选项的索引，listener是选中某一项时的回调接口
                .setSingleChoiceItems(items,0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) { //which就是选中的position
                         //提示颜色
                        Toast.makeText(DialogActivity.this, items[which], Toast.LENGTH_SHORT).show();
                        //移除dilaog
                        dialog.dismiss();
                    }
                }).show() ;
    }

    /***
     * 显示自定义AlertDialog
     */
    public void showCD(View v){
        //动态加载布局文件, 得到对应的View对象
        View view = View.inflate(this, R.layout.dialog_view, null);
        //问题1:　view的真实类型?是布局文件根标签的类型, 包含了子View对象
        //问题2:　如何得到一个独立View的子View?  view.findViewById(id)
        //findViewById(id)是在setContentView()中的View中找

        final EditText nameET = (EditText) view.findViewById(R.id.et_dialog_name);
        final EditText pwdET = (EditText) view.findViewById(R.id.et_dialog_pwd);

        new AlertDialog.Builder(this)
                .setView(view)   //直接加载视图
                .setNeutralButton("取消",null)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //读取用户名和密码
                        String username = nameET.getText().toString();
                        String pwd = pwdET.getText().toString();
                        //提示
                        Toast.makeText(DialogActivity.this, username+" : "+pwd, Toast.LENGTH_SHORT).show();
                    }
                }).show();
    }

    /****
     * 显示圆形进度ProgressDialog   循环完后消失
     * @param v
     */
    public void showPD(View v){
         ProgressDialog progressDialog = ProgressDialog.show(this,"数据加载","数据加载中.......");
        //模拟做一个长时间的工作
        //长时间的工作不能在主线程做, 得启动分线程完成
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0;i<20;i++) {
                    //休息一会
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //移除dialog
                progressDialog.dismiss();//方法在分线程执行, 但内部使用Handler实现主线程移除dialog
                //不能在分线程直接更新UI
                //在Android开发中，我们经常会遇到需要在主线程（UI线程）中更新UI的情况。
                // 然而，由于Android的单线程模型，我们在子线程中是不能直接更新UI的。为了解决这个问题，
                // Android提供了runOnUiThread方法，它允许我们在子线程中更新UI。
                //显示toast
                //Toast.makeText(DialogActivity.this, "加载完成了!!!", 0).show();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {//在主线程执行
                        Toast.makeText(DialogActivity.this, "加载完成了!!!", Toast.LENGTH_SHORT).show();
                    }
                });
                //runOnUiThread()在分线程执行
            }
        }).start();

    }

    /**
     * 显示水平进度ProgressDialog  循环20次 让水平进度条消失
     * @param v
     */
    public void showPD2(View v){
       ProgressDialog progressDialog =new ProgressDialog(this);
        //2. 设置样式
       progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       progressDialog.show();

        //4. 启动分线程, 加载数据, 并显示进度, 当加载完成移除dilaog
        new Thread(){
            @Override
            public void run() {
                 int max=20;
                progressDialog.setMax(max);//设置最大值是20
                 for(int i=0;i<max;i++){
                    //休息一会
                     try {
                         Thread.sleep(100);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                     progressDialog.setProgress(progressDialog.getProgress()+1); //循环20次达到最大值
                 }
                //移除dialog
                progressDialog.dismiss();
            }
        }.start();

    }

    /***
     * 日期选择器
     * DatePickerDialog，点击按钮出现一个日期选择器对话框，通过点击确认把选则的日期显示到文本控件上
     * @param v
     */
    public void showDateAD(View v){

        //创建日历对象
        Calendar calendar = Calendar.getInstance();
        //得到当前的年月日
        int year = calendar.get(Calendar.YEAR);//得到年份
        int monthOfYear = calendar.get(Calendar.MONTH);//月
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);//得到日
        Log.e("TAG", year+"-"+monthOfYear+"-"+dayOfMonth);

        new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                Log.e("TAG", year+"--"+(monthOfYear+1)+"--"+dayOfMonth);
            }
        },year,monthOfYear,dayOfMonth).show();
    }

    /***
     * 时间选择器
     * TimePickerDialog
     * @param v
     */
    public void showTimeAD(View v){
        Calendar c = Calendar.getInstance();
        int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //得到小时
        int minute = c.get(Calendar.MINUTE); //得到分钟
        Log.e("TAG", hourOfDay+":"+minute);
        new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                Log.e("TAG", hourOfDay+"::"+minute);
            }
        },hourOfDay,minute,
                true)//是否为二十四制
                .show();
    }

}